package com.gem.day09;

/**
 * 本类用来演示java.lang.StringBuilder
 * 
 * StringBuilder和StringBuffer都是可变字符串
 * 
 * 注意:
 * StringBuilder和StringBuffer提供几乎相同的API,即提供的功能方法基本相同,
 * 但是他们的安全性[多线程并发环境]和性能不同.
 * StringBuilder线程非安全,性能高
 * StringBuffer线程安全,性能低
 * 
 * 一般使用StringBuilder即可,如果是多线程并发环境,则使用StringBuffer
 * 
 * @author easonsy
 * 2020年7月29日 上午8:33:45
 */
public class StringBuilderDemo {
	public static void main(String[] args) {
		//创建StringBuilder容器
		//1.使用空参构造创建,默认单位为16
		StringBuilder stringBuilder1 = new StringBuilder();

		//2.自定义容器容积单位
		StringBuilder stringBuilder2 = new StringBuilder(20);

		//3.创建有值的StringBuilder容器[把字符串转换成StringBuilder对象]
		StringBuilder stringBuilder3 = new StringBuilder("abc");

		//常用方法
		//0.同String的方法
		//charAt(),compareTo(),indexOf(),lastIndexOf(),substring()

		//1.获取StringBuilder容量[容量不是字符数]
		System.out.println(stringBuilder1.capacity());
		System.out.println(stringBuilder2.capacity());
		System.out.println(stringBuilder3.capacity());

		//2.获取StringBuilder的长度[字符数]
		System.out.println(stringBuilder3.length());
		//3.StringBuilder的拼接方法
		stringBuilder3.append("def").append("ghi");
		System.out.println(stringBuilder3);

		//4.删除指定区间的多个字符[前闭后开]
		stringBuilder3.delete(1, 3);
		System.out.println(stringBuilder3);

		//5.根据下标删除指定字符
		stringBuilder3.deleteCharAt(0);
		System.out.println(stringBuilder3);

		//6.添加内容
		stringBuilder3.insert(2, "abc");
		System.out.println(stringBuilder3);

		//7.字符串替换
		//注意:此替换方法和String中的替换功能不同[前闭后开]
		stringBuilder3.replace(2, 5, "ABC");
		System.out.println(stringBuilder3);

		//8.反转字符串
		stringBuilder3.reverse();
		System.out.println(stringBuilder3);

		//9.通过下标修改字符
		StringBuilder stringBuilder4 = new StringBuilder("abc");
		stringBuilder4.setCharAt(1, 'B');
		System.out.println(stringBuilder4);

		//10.设置动态字符串的长度
		//注意:长度如果小于原字符串,则末尾删除;如果大于原字符串,则末尾扩容,扩容后的每个空位是字符默认值
		stringBuilder4.setLength(10);
		System.out.println(stringBuilder4);
	}
}
